#pragma(once)

#include <iostream>
#include <queue>
#include <list>
#include <deque>
#include <memory>
#include <vector>
#include <cstdlib>
#include <string>
#include <stdexcept>

using namespace std;
namespace learn
{
    namespace overloadTest
    {
        void overloadTest(void);
        inline void print(int i) // 这里必须加inline，因为是在h文件中，会被多次包含
        {
            cout << "整数为: " << i << endl;
        }

        inline void print(double f)
        {
            cout << "浮点数为: " << f << endl;
        }

        inline void print(char c[])
        {
            cout << "字符串为: " << c << endl;
        }
        // 重载包括函数重载，运算符重载
        class overloadTest
        {
        public:
            overloadTest() {}
            overloadTest(int a, int b) : a(a), b(b) {}
            overloadTest(const overloadTest &ov)
            {
                cout << "拷贝构造overloadTest" << endl;
                a = ov.a;
                b = ov.b;
            }
            ~overloadTest() {}
            overloadTest operator+(const overloadTest &ov) // 重载+号
            {
                // overloadTest ov0; // 这里c++实际上就是用的接收对象的地址，比如ov = ov2 + ov3;这里ov就是ov0;
                // ov0.a = 5;
                // ov0.b = 6;
                // return ov0;
                return {ov.a + this->a, ov.b + this->b}; // 也可以一句返回
            }
            bool operator=(const overloadTest &ov) // 重载=号
            {
                // overloadTest ov0; // 这里c++实际上就是用的接收对象的地址，比如ov = ov2 + ov3;这里ov就是ov0;
                // ov0.a = 5;
                // ov0.b = 6;
                // return ov0;
                this->a = ov.a;
                this->b = ov.b;
            }
            queue<overloadTest> mq;
        private:
            friend void overloadTest(void);

        private:
            int a;
            int b;
        };
        class magicTest {
            public:
                int show() { cout << arr[0] <<" " << arr[2] << endl;
                    return 0;
                }

            private:
                int arr[4096];
        };
    }
}